home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / lib / include / proc.h < prev    next >
C/C++ Source or Header  |  1992-06-01  |  20KB  |  614 lines

  1. /*
  2.  * procUser.h --
  3.  *
  4.  *    Definitions for use in the Proc system calls.
  5.  *
  6.  * Copyright 1986, 1988 Regents of the University of California
  7.  * Permission to use, copy, modify, and distribute this
  8.  * software and its documentation for any purpose and without
  9.  * fee is hereby granted, provided that the above copyright
  10.  * notice appear in all copies.  The University of California
  11.  * makes no representations about the suitability of this
  12.  * software for any purpose.  It is provided "as is" without
  13.  * express or implied warranty.
  14.  *
  15.  * $Header: /sprite/src/lib/include/RCS/proc.h,v 1.22 92/05/31 16:54:40 kupfer Exp $ SPRITE (Berkeley)
  16.  */
  17.  
  18. #ifndef _PROCUSER
  19. #define _PROCUSER
  20.  
  21.  
  22. /*
  23.  * Process Termination Reason flags:
  24.  *
  25.  *   PROC_TERM_EXITED        - The process has called Proc_Exit.
  26.  *   PROC_TERM_DETACHED        - The process has called Proc_Detach.
  27.  *   PROC_TERM_SIGNALED        - The process has died because of a signal.
  28.  *   PROC_TERM_DESTROYED    - The process has died because the internal
  29.  *                  state of the process was found to be
  30.  *                  invalid as a result of a user level error.
  31.  *   PROC_TERM_SUSPENDED    - The process has been suspended.
  32.  *   PROC_TERM_RESUMED        - The process has resumed execution as the
  33.  *                  result of a resume signal.
  34.  */
  35.  
  36. #define PROC_TERM_EXITED        1
  37. #define PROC_TERM_DETACHED        2
  38. #define PROC_TERM_SIGNALED        3
  39. #define PROC_TERM_DESTROYED        4
  40. #define    PROC_TERM_SUSPENDED        5
  41. #define    PROC_TERM_RESUMED        6
  42.  
  43. /*
  44.  * Reasons why a process was destroyed (PROC_TERM_DESTROYED):
  45.  * 
  46.  * PROC_BAD_STACK        - A process's user stack is invalid upon
  47.  *                  return from a signal handler.
  48.  * PROC_BAD_PSW         - The processor status word that is to be
  49.  *                  restored upon return from a signal handler
  50.  *                  has the supervisor bit set.
  51.  * PROC_VM_READ_ERROR        - The virtual memory system couldn't read from
  52.  *                  the page server.
  53.  * PROC_VM_WRITE_ERROR        - The virtual memory system couldn't write to
  54.  *                  the page server.
  55.  */
  56.  
  57. #define    PROC_BAD_STACK            1
  58. #define    PROC_BAD_PSW            2
  59. #define    PROC_VM_READ_ERROR        3
  60. #define    PROC_VM_WRITE_ERROR        4
  61.  
  62. #ifndef _ASM
  63. /*
  64.  *  Definition of a process ID.
  65.  */
  66.  
  67. typedef unsigned int     Proc_PID;
  68.  
  69.  
  70.  
  71. /*
  72.  * Special values to indicate the pid of the current process, or the host on
  73.  * which it is running, respectively.
  74.  */
  75.  
  76. #define PROC_MY_PID    ((Proc_PID) 0xffffffff)
  77. #define PROC_MY_HOSTID    ((unsigned int) 0xffffffff)
  78.  
  79. /*
  80.  * Mask to extract process table index from pid.
  81.  */
  82. #define    PROC_INDEX_MASK        0x000000FF
  83.  
  84. /*
  85.  * Convert a process id into a process table index.
  86.  */
  87. #define    Proc_PIDToIndex(pid) ((pid) & PROC_INDEX_MASK)
  88.  
  89. /*
  90.  * Special parameter to Proc_Migrate to evict all processes from a
  91.  * workstation.
  92.  */
  93.  
  94. #define PROC_ALL_PROCESSES    ((Proc_PID) 0)
  95.  
  96. /*
  97.  * Special family value to indicate the process isn't in a family and 
  98.  * a macro to see if the process is in a family.
  99.  */
  100.  
  101. #define PROC_NO_FAMILY    (Proc_PID) -1
  102. #define Proc_In_A_Family(familyID) ((familyID) != PROC_NO_FAMILY)
  103.  
  104.  
  105. /*
  106.  * PROC_SUPER_USER_ID is the user ID of the omnipotent super-user and 
  107.  * PROC_NO_ID is used when specifying no id to the Proc_SetIDs call.
  108.  */
  109.  
  110. #define PROC_SUPER_USER_ID      0
  111. #define PROC_NO_ID          -1
  112.  
  113. /*
  114.  * PROC_NO_INTR_PRIORITY is used to provide system processes 
  115.  *  infinitely-high priority.
  116.  */
  117.  
  118. #define PROC_MIN_PRIORITY    -2
  119. #define PROC_MAX_PRIORITY     2
  120.  
  121. #define PROC_NO_INTR_PRIORITY     2
  122. #define PROC_HIGH_PRIORITY     1
  123. #define PROC_NORMAL_PRIORITY     0
  124. #define PROC_LOW_PRIORITY    -1
  125. #define PROC_VERY_LOW_PRIORITY    -2
  126.  
  127. /*
  128.  *  Process state flags:
  129.  */
  130. typedef enum {
  131.     PROC_UNUSED,    /* The process doesn't exist yet. */
  132.     PROC_RUNNING,    /* The process is executing on a processor. */
  133.     PROC_READY,        /* The process is ready to execute. */
  134.     PROC_WAITING,    /* The process is waiting for an event to occur such
  135.              * as I/O completion or a mutex lock released. */
  136.     PROC_EXITING,    /* The process has terminated and is on the 
  137.              * exiting list. */
  138.     PROC_DEAD,        /* The process has been terminated is on the dead list*/
  139.     PROC_MIGRATED,    /* The process is running on a remote machine. */
  140.     PROC_NEW,        /* The process was just created. */
  141.     PROC_SUSPENDED    /* The process is suspended. */
  142. } Proc_State;
  143.  
  144. #endif /* _ASM */
  145.  
  146.  
  147. /*
  148.  * Process attributes flags:
  149.  *
  150.  *  PROC_KERNEL               - The process is a kernel process.
  151.  *  PROC_USER                 - The process is a user process.
  152.  *  PROC_DEBUGGED        - The process is being debugged by the system
  153.  *                  debugger.
  154.  *  PROC_DEBUG_ON_EXEC        - The process will start in debugged mode.
  155.  *  PROC_DEBUG_WAIT        - A debugger is waiting for this process to go
  156.  *                  onto the debug list.
  157.  *  PROC_SINGLE_STEP_FLAG    - The process will have the trace bit set
  158.  *                  before it runs.
  159.  *  PROC_MIG_PENDING        - The process will be migrated when it
  160.  *                  completes its next trap.
  161.  *  PROC_DONT_MIGRATE        - The process should not be migrated yet, even
  162.  *                  when it traps.
  163.  *  PROC_FOREIGN        - The process has been migrated from another
  164.  *                  workstation to this one.
  165.  *  PROC_DYING            - The process is comitting hari-kari.
  166.  *  PROC_LOCKED            - This process is locked.
  167.  *  PROC_NO_VM            - The virtual memory resources have been
  168.  *                  freed up for this user process.
  169.  *  PROC_MIGRATING        - The process is in the middle of migrating
  170.  *                  to another workstation.  This happens after
  171.  *                  PROC_MIG_PENDING is set but before the
  172.  *                  process's PROC_MIGRATION_DONE flag is 
  173.  *                  set.  Not cleared until the process 
  174.  *                  context switches to PROC_MIGRATED or (for 
  175.  *                  evictions) exits.
  176.  *  PROC_MIGRATION_DONE        - indicates successful completion of a
  177.  *                  migration trap.  Set just before resuming 
  178.  *                  the remote process.
  179.  *  PROC_ON_DEBUG_LIST        - The process is on the debug list.
  180.  *  PROC_REMOTE_EXEC_PENDING    - The process should perform an exec as part
  181.  *                  of migration.
  182.  *  PROC_MIG_ERROR        - Indicates asynchronous error before
  183.  *                  migrating process context switches.
  184.  *  PROC_EVICTING        - Indicates process is being evicted
  185.  *                  (for statistics gathering).
  186.  *  PROC_KILLING        - Indicates we're trying to kill the process
  187.  *                  but it's in the debugger.  This is a
  188.  *                  big hack to get dbx to work.
  189.  *  PROC_VFORKCHILD        - This process created with vfork
  190.  *                                and parent is still waiting.
  191.  *  PROC_VFORKPARENT        - This process is waiting for its child
  192.  *                                to exec or exit.
  193.  *  PROC_RESUME_PROCESS        - The process should ignore a pending 
  194.  *                    suspend signal.
  195.  *  PROC_PENDING_SUSPEND    - The process has gotten a suspend signal 
  196.  *                    but hasn't suspended itself yet.
  197.  */
  198.  
  199. #define PROC_KERNEL            0x000001
  200. #define PROC_USER            0x000002
  201. #define PROC_DEBUGGED            0x000004
  202. #define PROC_DEBUG_ON_EXEC        0x000008
  203. #define PROC_SINGLE_STEP_FLAG        0x000010
  204. #define PROC_DEBUG_WAIT            0x000020
  205. #define PROC_MIG_PENDING        0x000040
  206. #define PROC_DONT_MIGRATE        0x000080
  207. #define PROC_FOREIGN            0x000100
  208. #define PROC_DYING            0x000200
  209. #define PROC_LOCKED            0x000400
  210. #define PROC_NO_VM            0x000800
  211. #define PROC_MIGRATING            0x001000
  212. #define PROC_MIGRATION_DONE        0x002000
  213. #define PROC_ON_DEBUG_LIST        0x004000
  214. #define PROC_REMOTE_EXEC_PENDING    0x008000
  215. #define PROC_MIG_ERROR            0x010000
  216. #define PROC_EVICTING            0x020000
  217. #define PROC_KILLING            0x040000
  218. #define PROC_VFORKCHILD            0x080000
  219. #define PROC_VFORKPARENT        0x100000
  220. #define PROC_RESUME_PROCESS        0x200000
  221. #define PROC_PENDING_SUSPEND        0x400000
  222.  
  223. /* 
  224.  * The include's must come after the definition of Proc_State (and 
  225.  * possibly some other stuff as well).  Blech.
  226.  */
  227.  
  228. #ifndef _ASM
  229. #include <sprite.h>
  230. #include <spriteTime.h>
  231. #ifdef KERNEL
  232. #include <sigTypes.h>
  233. #include <machTypes.h>
  234. #include <user/vmTypes.h>
  235. #else
  236. #include <kernel/sigTypes.h>
  237. #include <kernel/machTypes.h>
  238. #include <vmTypes.h>
  239. #endif
  240.  
  241. #endif /* _ASM */
  242.  
  243. #ifndef _ASM
  244.  
  245.  
  246. /*
  247.  *  Resource usage summary for a process. 
  248.  *  Used by Proc_Wait and Proc_GetResUsage.
  249.  *
  250.  *   Preliminary version: more fields will be added when needed.
  251.  *
  252.  *  Note: the cpu usage fields use the Time format. In the process
  253.  *  control block, they are stored in the Timer_Ticks format.
  254.  *  They are converted to Time format by the system calls that return
  255.  *  resource usage info.
  256.  */
  257.  
  258. typedef struct {
  259.     Time kernelCpuUsage;    /* How much time has been spent in kernel mode*/
  260.     Time userCpuUsage;        /* How much time has been spent in user mode. */
  261.  
  262.     Time childKernelCpuUsage;    /* Sum of time spent in kernel mode for 
  263.                  * all terminated children. */
  264.     Time childUserCpuUsage;    /* Sum of time been spent in user mode for
  265.                  * all terminated children. */
  266.     int    numQuantumEnds;        /* number of times the process was
  267.                  * context switched due to a quantum end. */
  268.     int numWaitEvents;        /* number of times the process was
  269.                       * context switched due to its waiting for
  270.                  *  an event. */
  271. } Proc_ResUsage;
  272.  
  273. /*
  274.  *  Request values for use with Proc_Debug system call.
  275.  */
  276.  
  277. typedef enum {
  278.     PROC_GET_THIS_DEBUG,
  279.     PROC_GET_NEXT_DEBUG,
  280.     PROC_CONTINUE,
  281.     PROC_SINGLE_STEP,
  282.     PROC_GET_DBG_STATE,
  283.     PROC_SET_DBG_STATE,
  284.     PROC_READ,
  285.     PROC_WRITE,
  286.     PROC_DETACH_DEBUGGER
  287. } Proc_DebugReq;
  288.  
  289. /*
  290.  * Flags to Proc_Wait
  291.  *
  292.  *         PROC_WAIT_BLOCK    -    Block if there if are no stopped or
  293.  *                terminated processes.
  294.  *    PROC_WAIT_FOR_SUSPEND - Return status of children that are suspended.
  295.  *                If this option isn't specified and children
  296.  *                are stopped then it is as though they are
  297.  *                still running.
  298.  */
  299. #define    PROC_WAIT_BLOCK        0x1
  300. #define    PROC_WAIT_FOR_SUSPEND    0x2
  301.  
  302. #define PROC_NUM_GENERAL_REGS 16
  303.  
  304. typedef struct {
  305.     Proc_PID    processID;        /* Process ID of debuggee */
  306.     int    termReason;            /* Reason why process has died or
  307.                      * it has been detached. */
  308.     int    termStatus;            /* Exit/detach status or signal number
  309.                      * that caused the process to die. */
  310.     int    termCode;            /* The code for the signal. */
  311.     Mach_RegState regState;        /* The register state of the process. */
  312.     int    sigHoldMask;            /* Mask of signals to be held. */
  313.     int    sigPendingMask;            /* Mask of pending signals. */
  314.     int    sigActions[SIG_NUM_SIGNALS];     /* Array of the different types
  315.                        of actions for signals. */
  316.     int    sigMasks[SIG_NUM_SIGNALS];     /* Array of signal hold masks for 
  317.                        signal handlers. */
  318.     int    sigCodes[SIG_NUM_SIGNALS];     /* Array of signal handlers for 
  319.                        signals. */
  320.  
  321. } Proc_DebugState;
  322.  
  323. /*
  324.  * Structure that represents one environment variable.
  325.  */
  326.  
  327. typedef struct {
  328.     char *name;        /* Variable name. */
  329.     char *value;    /* Value for variable. */
  330. } Proc_EnvironVar;
  331.  
  332. /*
  333.  * Process information. Add new fields to the end of this structure!
  334.  */
  335. typedef struct  {
  336.     int        processor;    /* Processor number the process is running on
  337.                  * or wants to run on if the processor is
  338.                  * available.  */
  339.  
  340.     Proc_State    state;        /* Describes a process's current running state.
  341.                  * >>> See Proc_State definitions above. */ 
  342.  
  343.     int        genFlags;    /* Flags to describe a processes overall state.
  344.                  * >>> See definitions below */ 
  345.  
  346.     /*
  347.      *-----------------------------------------------------------------
  348.      *
  349.      *   Various Process Identifiers.
  350.      *    
  351.      *    Note that the user and effectiveUser ID are kept here because
  352.      *    they are used for permission checking in various places.  There
  353.      *    is also a list of group IDs which is kept in the filesystem state.
  354.      *
  355.      *-----------------------------------------------------------------
  356.      */
  357.  
  358.     Proc_PID    processID;        /* Actual process ID of this
  359.                      * process (for migrated processes
  360.                      * this is different than the PID
  361.                      * that the user sees). */
  362.     Proc_PID    parentID;        /* The process ID of the parent 
  363.                      * of this process. */
  364.     int        familyID;        /* The id of the process family that 
  365.                      * this process belongs to. */
  366.     int        userID;            /* The user id is used to check access
  367.                      * rights to files and check ability
  368.                      * to signal other processes. */
  369.     int        effectiveUserID;    /* The effective user id is used
  370.                      * for setuid access. */
  371.  
  372.     /*
  373.      *-----------------------------------------------------------------
  374.      *
  375.      *    Synchronization fields.
  376.      *
  377.      * Synchronization state includes an event the process is waiting on.
  378.      *
  379.      *-----------------------------------------------------------------
  380.      */
  381.  
  382.     int         event;         /* Event # the process is waiting for. */
  383.  
  384.     /*
  385.      *-----------------------------------------------------------------
  386.      *
  387.      *    Scheduling fields.
  388.      *
  389.      *-----------------------------------------------------------------
  390.      */
  391.  
  392.  
  393.     int      billingRate;    /* Modifies the scheduler's calculation of
  394.                  * the processes priority.  */
  395.     unsigned int recentUsage;    /* Amount of CPU time used recently */
  396.     unsigned int weightedUsage;    /* Smoothed avg. of CPU usage, weighted by
  397.                  * billing rate. */
  398.     unsigned int unweightedUsage; /* Smoothed avg. of CPU usage, not weighted by
  399.                    * billing rate. */
  400.  
  401.     /*
  402.      *-----------------------------------------------------------------
  403.      *
  404.      *    Accounting and Resource Usage fields.
  405.      *
  406.      *-----------------------------------------------------------------
  407.      */
  408.  
  409.     Time kernelCpuUsage;    /* How much time has been spent in kernel mode*/
  410.     Time userCpuUsage;        /* How much time has been spent in user mode. */
  411.  
  412.     Time childKernelCpuUsage;    /* Sum of time spent in kernel mode for 
  413.                       * all terminated children. */
  414.     Time childUserCpuUsage;    /* Sum of time spent in user mode for
  415.                       * all terminated children. */
  416.     int     numQuantumEnds;        /* number of times the process was 
  417.                       * context switched due to a quantum 
  418.                      * end. */
  419.     int        numWaitEvents;        /* number of times the process was
  420.                      * context switched due to its waiting 
  421.                      * for an event. */
  422.     unsigned int schedQuantumTicks;    /* Number of clock ticks until this 
  423.                      * process is due to be switched out. */
  424.  
  425.     /*
  426.      *-----------------------------------------------------------------
  427.      *
  428.      *   Virtual Memory fields.
  429.      *
  430.      *-----------------------------------------------------------------
  431.      */
  432.     Vm_SegmentID        vmSegments[VM_NUM_SEGMENTS];
  433.  
  434.  
  435.     /*
  436.      *-----------------------------------------------------------------
  437.      *
  438.      *    Signals
  439.      *
  440.      *-----------------------------------------------------------------
  441.      */
  442.  
  443.     int        sigHoldMask;        /* Mask of signals to be held. */
  444.     int        sigPendingMask;        /* Mask of pending signals. */
  445.                         /* Array of the different types
  446.                        of actions for signals. */
  447.     int        sigActions[SIG_NUM_SIGNALS];
  448.                         /* Array of signal hold masks for 
  449.                        signal handlers. */
  450.     /*
  451.      *---------------------------------------------------------------------
  452.      *
  453.      * Data for process migration.
  454.      *
  455.      *---------------------------------------------------------------------
  456.      */
  457.     int        peerHostID;         /* If on home node, ID of remote node.
  458.                       * If on remote node, ID of home node.
  459.                       * If not migrated, undefined. */
  460.     Proc_PID    peerProcessID;         /* If on remote note, process ID on
  461.                       * home node, and vice-versa. */
  462. } Proc_PCBInfo;
  463.  
  464. /*
  465.  * Define the maximum length of the name and value of each enviroment
  466.  * variable and the maximum size of the environment.
  467.  */
  468.  
  469. #define    PROC_MAX_ENVIRON_NAME_LENGTH    4096
  470. #define    PROC_MAX_ENVIRON_VALUE_LENGTH    4096
  471. #define    PROC_MAX_ENVIRON_SIZE        100
  472.  
  473. /*
  474.  * Define the maximum size of the first line of an interpreter file.
  475.  */
  476.  
  477. #define PROC_MAX_INTERPRET_SIZE        80
  478.  
  479. /*
  480.  * Definitions for the Proc_G/SetIntervalTimer system calls.
  481.  *
  482.  * Currently, only 1 type of timer is defined:
  483.  *  PROC_TIMER_REAL -  time between intervals is real (a.k.a wall-clock) time.
  484.  *
  485.  * The values and the structure have the same values and layout as their 
  486.  * 4.3BSD equivalents.
  487.  */
  488.  
  489. #define PROC_TIMER_REAL        0
  490. /*
  491.  * not used yet.
  492. #define PROC_TIMER_VIRTUAL    1
  493. #define PROC_TIMER_PROFILE    2
  494. */
  495.  
  496. #define PROC_MAX_TIMER        PROC_TIMER_REAL
  497.  
  498. typedef struct {
  499.     Time    interval;    /* Amount of time between timer expirations. */
  500.     Time    curValue;    /* Amount of time till the next expiration. */
  501. } Proc_TimerInterval;
  502.  
  503. /* 
  504.  * Size of the buffer containing arguments, to be passed back to users.  
  505.  */
  506.  
  507. #define PROC_PCB_ARG_LENGTH 256
  508.  
  509. /*
  510.  * The following structure is used to transfer fixed-length argument strings
  511.  * from the kernel back to user space.  A typedef simplifies later
  512.  * declarations (and may be the only way to do it?), since 
  513.  *    char *argPtr[PROC_PCB_ARG_LENGTH]
  514.  * would be an array of pointers to strings rather than an array of strings.
  515.  */
  516.  
  517. typedef struct {
  518.     char argString[PROC_PCB_ARG_LENGTH];
  519. } Proc_PCBArgString;
  520.  
  521.  
  522. /*
  523.  * Define the state of this machine w.r.t accepting migrated processes.
  524.  * A machine must always be willing to accept its own processes if they
  525.  * are migrated home.  Other than that, a host may allow migrations onto
  526.  * it under various sets of criteria, and may allow migrations away from
  527.  * it under similar sets of criteria.
  528.  *
  529.  *    PROC_MIG_IMPORT_NEVER        - never allow migrations to this host.
  530.  *    PROC_MIG_IMPORT_ROOT         - allow migrations to this host only
  531.  *                      by root.
  532.  *    PROC_MIG_IMPORT_ALL          - allow migrations by anyone.
  533.  *    PROC_MIG_IMPORT_ANYINPUT     - don't check keyboard input when
  534.  *                      determining availability.
  535.  *    PROC_MIG_IMPORT_ANYLOAD      - don't check load average when
  536.  *                      determining availability.
  537.  *    PROC_MIG_IMPORT_ALWAYS      - don't check either.
  538.  *    PROC_MIG_EXPORT_NEVER        - never export migrations from this
  539.  *                       host.
  540.  *    PROC_MIG_EXPORT_ROOT            - allow only root to export.
  541.  *    PROC_MIG_EXPORT_ALL            - allow anyone to export.
  542.  *
  543.  * For example, a reasonable default for a file server might be to import
  544.  * and export only for root; for a user's machine, it might be to allow
  545.  * anyone to migrate; and for a compute server, it might never export
  546.  * and import always regardless of load average or keyboard input.  (The
  547.  * load average would not have to be exceptionally low to determine
  548.  * availability; the host still would only be selected if the load average
  549.  * were low enough to gain something by migrating to it.)
  550.  */
  551.  
  552. #define PROC_MIG_IMPORT_NEVER              0
  553. #define PROC_MIG_IMPORT_ROOT        0x00000001
  554. #define PROC_MIG_IMPORT_ALL         0x00000003
  555. #define PROC_MIG_IMPORT_ANYINPUT    0x00000010
  556. #define PROC_MIG_IMPORT_ANYLOAD        0x00000020
  557. #define PROC_MIG_IMPORT_ALWAYS  \
  558.             (PROC_MIG_IMPORT_ANYINPUT | PROC_MIG_IMPORT_ANYLOAD)
  559. #define PROC_MIG_EXPORT_NEVER             0
  560. #define PROC_MIG_EXPORT_ROOT        0x00010000
  561. #define PROC_MIG_EXPORT_ALL        0x00030000
  562.  
  563. #define PROC_MIG_ALLOW_DEFAULT (PROC_MIG_IMPORT_ALL | PROC_MIG_EXPORT_ALL)
  564.  
  565. /*
  566.  * Library call declarations.
  567.  */
  568.  
  569. extern ReturnStatus Proc_SetExitHandler();
  570. extern void        Proc_Exit();
  571.  
  572. /*
  573.  * System call declarations.
  574.  */
  575.  
  576. extern ReturnStatus Proc_Fork();
  577. extern void        Proc_RawExit();
  578. extern ReturnStatus Proc_Detach();
  579. extern ReturnStatus Proc_Wait();
  580. extern ReturnStatus Proc_RawWait();
  581. extern ReturnStatus Proc_Exec();
  582. extern ReturnStatus Proc_ExecEnv();
  583.  
  584. extern ReturnStatus Proc_GetIDs();
  585. extern ReturnStatus Proc_SetIDs();
  586. extern ReturnStatus Proc_GetGroupIDs();
  587. extern ReturnStatus Proc_SetGroupIDs();
  588. extern ReturnStatus Proc_GetFamilyID();
  589. extern ReturnStatus Proc_SetFamilyID();
  590.  
  591. extern ReturnStatus Proc_GetPCBInfo();
  592. extern ReturnStatus Proc_GetResUsage();
  593. extern ReturnStatus Proc_GetPriority();
  594. extern ReturnStatus Proc_SetPriority();
  595.  
  596. extern ReturnStatus Proc_Debug();
  597. extern ReturnStatus Proc_Profile();
  598.  
  599. extern ReturnStatus Proc_SetIntervalTimer();
  600. extern ReturnStatus Proc_GetIntervalTimer();
  601.  
  602. extern ReturnStatus Proc_SetEnviron();
  603. extern ReturnStatus Proc_UnsetEnviron();
  604. extern ReturnStatus Proc_GetEnvironVar();
  605. extern ReturnStatus Proc_GetEnvironRange();
  606. extern ReturnStatus Proc_InstallEnviron();
  607. extern ReturnStatus Proc_CopyEnviron();
  608.  
  609. extern ReturnStatus Proc_Migrate();
  610.  
  611. #endif /* _ASM */
  612.  
  613. #endif /* _PROCUSER */
  614.